package com.cloud.system.api.service;

import java.util.List;
import java.util.Map;

import com.cloud.system.api.bean.RecCheckUnitCriteriaBean;
import com.cloud.system.api.bean.RecPunishSuperviseItemCriteriaBean;
import com.cloud.system.api.bean.SuperviseBean;
import com.cloud.system.api.entity.SysConfig;
import com.cloud.system.api.entity.UnitInfo;
import com.cloud.system.common.result.SelectItem;
import com.github.pagehelper.PageInfo;

/**
 * 针对System模块的Cache缓存
 * @author Minglong.tao
 *
 */
public interface SystemCacheService {
	/**
	 * 加载字典下拉选项
	 * @param sysId
	 * @param itemKey
	 * @return
	 */
	List<SelectItem> loadSelectItem(String itemKey);
	
	/**
	 * 获取字典键值Map
	 * @param sysId
	 * @param string
	 * @return
	 */
	Map<String, String> listDictItemMap(String itemKey);
	
	/**
	 * 清理字典缓存
	 * @param sysId
	 * @param itemKey
	 */
	void evitDictCache(String itemKey);

	/**
	 * 获取系统配置项
	 * @param sysId
	 * @param configName
	 * @return
	 */
	String loadSysConfigItem(String configName);

	/**
	 * 获取所有系统配置项
	 * @return
	 */
	List<SysConfig> loadAllSysConfigItem();
	/**
	 * 清理系統配置項缓存
	 * @param sysId
	 * @param configName
	 * @return
	 */
	void evitSysConfigItemCache(String configName);
	
	/**
	 * 获取机构执法领域信息
	 * @param unitId
	 * @return
	 */
	List<SelectItem> loadUnitDomains(long unitId);


	/**
	 * 获取行政区划信息
	 * @param
	 * @return
	 */
	List<UnitInfo> loadUnitAreas();
	
	/**
	 * 淘汰机构执法领域缓存
	 * @param unitId
	 */
	void evitUnitDomainsCache(long unitId);

	/** 获取地址信息
	 *
	 * @return
	 */
	List<SelectItem> loadAddressItems();

	/**
	 * 加载部门人员
	 * @return
	 */
	List<SelectItem> loadHuman(Long unitId);

	/**
	 * 获得当前用户领域
	 * @return
	 */
	List<SelectItem> loadUnitDomainsByUnitId(long unitId);

	/**
	 * 获得检查事项
	 * @return
	 */
	PageInfo<SuperviseBean> searchCheckItem(RecCheckUnitCriteriaBean recCheckUnitCriteriaBean);

	/**
	 * 行政处罚监管事项
	 * @return
	 */
	PageInfo<SuperviseBean> searchSuperviseItem(RecPunishSuperviseItemCriteriaBean recPunishSuperviseItemCriteriaBean);

	/**
	 * 查询当前登陆者的所属主体领域
	 * @param unitId
	 * @return
	 */
	List<SelectItem> findSubjectDomain(long unitId);
}
